Aspects of the present invention relate to the Information Technology (IT) field. More specifically, one or more aspects relate to the development of software programs.
A background is hereinafter introduced with discussion of techniques relating to its context. However, even when this discussion refers to documents, acts, devices and the like, it does not suggest or represent that the discussed techniques are part of the prior art or are common general knowledge in the field relevant to aspects of the present disclosure.
The development of software programs is a very complex activity, especially for large software programs (for example, running in heterogeneous network environments or with multi-tier structures).
For this purpose, several utilities are available for assisting software developers in this activity. For example, an Integrated Development Environment (IDE) provides a single comprehensive environment for several utilities (with similar user interfaces) relating to different tasks of the software development; particularly the IDE may integrate utilities for editing, debugging, compiling/interpreting and deploying the software programs.
With reference in particular to the editing of the software programs, many facilities may be available to assist the software developers. For example, parsing facilities may identify syntax errors as soon as they are introduced, autocomplete facilities may predict commands at the beginning of their typing, and intelligent code completion facilities may suggest completion of commands in the relevant context.
Software reuse is another technique that may be used to assist the software developers, which technique is based on the use of software pieces that are already available for similar purposes. The software reuse may be applied by each software developer individually, at the level of an entire organization (in either an opportunistic or planned way) or by exploiting software pieces provided by third parties. Moreover, the software reuse may be implemented either by actually copying the software pieces into the software programs or by simply referencing them.
Nevertheless, the development of the software programs remains difficult, time-consuming and prone to errors.
This also applies to software programs exploiting services of cloud computing (or simply cloud) environments, wherein the (cloud) services are provided on-demand by cloud providers that provision, configure and release them upon request (completely masking a corresponding implementation); in this case, the software programs may invoke a large number of different cloud services, for example, provided according to the Software-as-a-Service (SaaS) model.
However, the choice of the cloud services to exploit (for example, by searching them in corresponding catalogs) is a manual activity that strongly depends on the skills of the software developers; therefore, very often the cloud services are not exploited (since the software developers may be unaware of them) or they are not exploited at their best (since they are not well-suited for the desired purposes).